home *** CD-ROM | disk | FTP | other *** search
/ PC Media 23 / PC MEDIA CD23.iso / share / prog / anubis / lista.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-08-04  |  2.2 KB  |  92 lines

  1. // LISTA.H
  2. // (C) Julio 1994 Anubis Software
  3. // Librería, que simula una lista.
  4.  
  5. #ifndef LISTA.H
  6. #define LISTA.H
  7.  
  8. #include <stdlib.h>
  9. #include <stdio.h>  // Sólo es provisional.
  10.  
  11. // Definición del tipo de la lista; El tipo Tipo_elemento, debe ser declarado
  12. // en tiempo de compilación mediante la sentencia:
  13. //
  14. // #define Tipo_elemento   <int,char,long,predefinido>
  15. //
  16. // y después, incluir el fichero LISTA.H
  17. //
  18. // #include "LISTA.H"
  19.  
  20. // Definición del tipo sobre el registro de la lista.
  21. typedef struct Registro_de_lista   {
  22.        Tipo_elemento    elemento;
  23.        struct Registro_de_lista  *siguiente;
  24. }Registro;
  25.  
  26.  
  27. // Definición de prototipos
  28. void anula (void);
  29. void inserta(Tipo_elemento,Registro *);
  30. Registro *siguiente(Registro *);
  31. Registro *anterior(Registro *);
  32. void suprime(Registro *);
  33. Tipo_elemento retrieve(Registro *);
  34. Registro *localiza(Tipo_elemento);
  35.  
  36.  
  37. // Variables de la lista
  38. Registro *Inicio;
  39. Registro *Fin;
  40.  
  41. void anula(void)  {
  42.      Inicio = new Registro;
  43.      Fin = Inicio;
  44.      (*Inicio).siguiente = NULL;
  45. }
  46.  
  47. void inserta(Tipo_elemento elem,Registro *rec)  {
  48.      Registro *Auxiliar;
  49.      Auxiliar= (*rec).siguiente;
  50.      (*rec).siguiente = new Registro;
  51.      (*((*rec).siguiente)).siguiente = Auxiliar;
  52.      ((*rec).siguiente)->elemento = elem;
  53.      if (rec == Fin)
  54.         Fin=(*rec).siguiente;
  55. }
  56.  
  57. void suprime(Registro *rec) {
  58.      (*rec).siguiente = (*((*rec).siguiente)).siguiente;
  59.      delete rec;
  60. }
  61.  
  62. Registro *siguiente(Registro *rec)  {
  63.          if (rec == Fin)
  64.             exit(0);
  65.          return( (*rec).siguiente );
  66. }
  67.  
  68. Registro *anterior(Registro *rec)  {
  69.          Registro *Auxiliar;
  70.          if (rec == Inicio)
  71.             exit(0);
  72.          Auxiliar = Inicio;
  73.          while ( (*Auxiliar).siguiente != rec)
  74.                Auxiliar = siguiente(Auxiliar);
  75.          return(Auxiliar);
  76. }
  77.  
  78. Tipo_elemento retrieve(Registro *rec)  {
  79.    return( (*((*rec).siguiente)).elemento );
  80. }
  81.  
  82. Registro *localiza(Tipo_elemento elem) {
  83.          Registro *Auxiliar;
  84.          Auxiliar = Inicio;
  85.          while( (retrieve(Auxiliar) != elem) && (Auxiliar != Fin) )
  86.                 Auxiliar = siguiente(Auxiliar);
  87.          return(Auxiliar);
  88. }
  89.  
  90.  
  91.  
  92. #endif